<html>
<head>
<script src="../../../resources/gc.js"></script>
<script src="../../../resources/js-test.js"></script>
<script src="resources/window-property-collector.js"></script>
<script>
var jsTestIsAsync = true;

var childWindow;
var propertiesToVerify = [];

function insertExpectedResult(path, expected)
{
    var property = path.join(".");
    if (property == "location.ancestorOrigins.length")
        expected = '0';
    propertiesToVerify.push({"path": path.slice(0), "property": property, "expected": expected});
}

function runTest()
{
    description("Tests property access on a cached DOMWindow after the associated frame is removed from a web page and garbage collected. Test should not crash and properties should be set to sane defaults.");
    var frame = document.getElementById("test_frame");
    childWindow = frame.contentWindow;
    // Have expected results assume that the frame has been closed and GCed (=> window.closed = true.)
    collectProperties(document.getElementById("src_frame").contentWindow, true);
    frame.parentNode.removeChild(frame);
    asyncGC(function () {
        for (var i = 0; i < propertiesToVerify.length; ++i) {
            // It's ok if the property no longer exists.
            if (pathExists(childWindow, propertiesToVerify[i].path))
                shouldBe("childWindow." + propertiesToVerify[i].property, propertiesToVerify[i].expected);
        }
        finishJSTest();
    });
}
</script>
</head>
<body onload="runTest()">
<iframe id="src_frame"></iframe>
<iframe id="test_frame" src="about:blank"></iframe>
</body>
</html>
